package com.example.justbuy.dome.domeActiviti;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class YongHu {
    ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();
    /**部署流程定义（从InputStream）*/
    @Test
    public void deploymentProcessDefinition_inputStream(){
        InputStream inputStreambpmn = this.getClass().getResourceAsStream("/bpmn/dome6.bpmn");
        InputStream inputStreampng = this.getClass().getResourceAsStream("/bpmn/dome6.png");
        Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
                .createDeployment()//创建一个部署对象
                .name("流程定义")//添加部署的名称
                .addInputStream("dome6.bpmn", inputStreambpmn)//使用资源文件的名称（要求：与资源文件的名称要一致），和输入流完成部署
                .addInputStream("dome6.png", inputStreampng)//使用资源文件的名称（要求：与资源文件的名称要一致），和输入流完成部署
                .deploy();//完成部署
        System.out.println("部署ID："+deployment.getId());
        System.out.println("部署名称："+deployment.getName());

    }

    @Test
    public void ssss(){
        /**设置用户信息*/
        ProcessInstance pi =processEngine.getRuntimeService().startProcessInstanceByKey("myProcess_1");
        System.out.println("流程实例ID:"+pi.getId());//流程实例ID
        System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID流程定义的流程实例的id。
        System.out.println("流程定义的key:"+pi.getProcessDefinitionKey());//关键流程定义的流程实例。
        System.out.println("流程的版本:"+pi.getProcessDefinitionVersion());//流程定义的版本的流程实例。
        System.out.println("流程是否被暂停:"+pi.isSuspended());//如果流程实例被暂停返回true
        System.out.println("流程开始的时间:"+pi.getStartTime());//实例开始时间
    }
//    /**启动流程实例*/
//    @Test
//    public void startProcessInstance(){
//        //流程定义的key
//        String processDefinitionKey = "Approval_Process";
//        ProcessInstance pi = processEngine.getRuntimeService()//与正在执行的流程实例和执行对象相关的Service
//                .startProcessInstanceByKey(processDefinitionKey);//使用流程定义的key启动流程实例，key对应helloworld.bpmn文件中id的属性值，使用key值启动，默认是按照最新版本的流程定义启动
//        pi.getProcessVariables();//返回流程变量 查询流程实例
//        System.out.println("流程实例ID:"+pi.getId());//流程实例ID
//        System.out.println("流程定义ID:"+pi.getProcessDefinitionId());//流程定义ID流程定义的流程实例的id。
//        System.out.println("流程定义的key:"+pi.getProcessDefinitionKey());//关键流程定义的流程实例。
//        System.out.println("流程的版本:"+pi.getProcessDefinitionVersion());//流程定义的版本的流程实例。
//        System.out.println("流程是否被暂停:"+pi.isSuspended());//如果流程实例被暂停返回true
//        System.out.println("流程开始的时间:"+pi.getStartTime());//实例开始时间
//    }
    /**
     * 查询当前人的个人任务
     */

    @Test
    public void findMyPersonTask() {
        String assignee = "dd";//暂定只有用户，后台
        ProcessEngineConfiguration cfg = new StandaloneProcessEngineConfiguration()
                .setJdbcUrl("jdbc:mysql://localhost:3306/ks?characterEncoding=UTF-8")
                .setJdbcUsername("root1")
                .setJdbcPassword("root")
                .setJdbcDriver("com.mysql.jdbc.Driver")
                .setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);
        ProcessEngine processEngine = cfg.buildProcessEngine();
        List<Task> list = processEngine.getTaskService()// 与正在执行的认为管理相关的Service
                .createTaskQuery()// 创建任务查询对象
                .taskAssignee(assignee)// 指定个人认为查询，指定办理人
                .list();
        if (list != null && list.size() > 0) {
            for (Task task : list) {
                System.out.println("任务ID:" + task.getId());
                System.out.println("任务名称:" + task.getName());
                System.out.println("任务的创建时间" + task);
                System.out.println("任务的办理人:" + task.getAssignee());
                System.out.println("流程实例ID:" + task.getProcessInstanceId());
                System.out.println("执行对象ID:" + task.getExecutionId());
                System.out.println("流程定义ID:" + task.getProcessDefinitionId());
                System.out.println("#################################");
            }
        }

    }

    @Test
    public void sss(){
        List<Task> list=processEngine.getTaskService().createTaskQuery().processDefinitionKey("myProcess_1")
                .list();
        if (list!=null&&list.size()>0){
            for (Task task : list) {
                System.out.println("流程实例id：" + task.getProcessInstanceId());
                System.out.println("任务id：" + task.getId());
                System.out.println("任务负责人：" + task.getAssignee());
                System.out.println("任务名称：" + task.getName());
                System.out.println(task.getCreateTime());
                System.out.println(task.getTaskDefinitionKey());
            }
        }
    }
    @Test
    public void setVariables(){
        /**与任务（正在执行）*/
        TaskService taskService = processEngine.getTaskService();
        //任务ID
        String taskId = "47502";//上面查询出来的id
        Person p = new Person();
        p.setId(20);
        p.setName("翠花");
        taskService.setVariable(taskId, "人员信息(添加固定版本)", p);//p可以换成任何类（对象）

        System.out.println("设置流程变量成功！");
    }
    /**完成当前的任务*/
    @Test
    public void completeMyPersonalTask(){
        //任务ID
        String taskId = "47502";//结束当前任务之前id一直不变
        processEngine.getTaskService()//与正在执行的任务管理相关的Service
                .complete(taskId);
        System.out.println("完成任务：任务ID："+taskId);
    }
}
